package com.zxisl;

import com.zxisl.bean.Mail;
import com.zxisl.handler.MailHandler;
import com.zxisl.init.Init;
import com.zxisl.util.StringUtil;
import org.apache.commons.io.FileUtils;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.log4j.Logger;

import javax.mail.Message;
import java.io.File;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;


/**
 * Created by ade on 2016/10/31.
 */
public class Main {

    public static Logger mainLogger = Logger.getLogger(Main.class);

    public static void main(String[] args) {

        try {

            List<String> subList = Init.subList;
            Map<String, Mail> mailMap = Init.mailMap;
            KafkaProducer kafkaProducer = Init.kafkaProducer;
//            String proStr = Init.proxyStr;
//            TransportClient esClient = ESUtils.getTransportClient();
//            List<String> proxyIpList = Init.proxyIpList;
//            MailHandler mailHder = new MailHandler();
              String[] proxyIpAttr = {};
//            boolean flag = false;
//            for (String proxyStr : proxyIpList) {
//                proxyIpAttr = proxyStr.split("--");
//                flag = mailHder.isProxyIpCanUse(proxyIpAttr[0], proxyIpAttr[1]);
//                if (flag) {
//                    break;
//                }else{
//                    //代理ip不可用，更新文件
//                    mailHder.refreshProxyFile(proxyStr);
//                }
//            }
//            mainLogger.info("--------代理ip为: " + proxyIpAttr[0]);
//            if (flag) {
                //读取文件,一行就是一条要抓取的数据,注意现在只有账户名和密码
                File inFile = new File(args[1]);
                List<String> emailList = FileUtils.readLines(inFile, Charset.defaultCharset());
                for (String emInfo : emailList) {
                    MailHandler mailHandler = new MailHandler();
                    //对单条email 进行逗号的拆分成一个数组
                    String[] userInfo = emInfo.split("--");
                    String userName = userInfo[0];
                    mainLogger.info("--------解析：" + userName);
                    //首先使用imap 方式爬取
                    String strHost = StringUtil.getHost("imap", userName);
                    Message[] messages = null;
                    //更新map的操作 传入strInfo[] 传出map
                    Map<String, Mail> returnMap = mailHandler.getMailMapByuserInfo(strHost, mailMap, userInfo);
                    messages = mailHandler.getMessageByMail(returnMap.get(strHost), proxyIpAttr);
                    //使用pop3方式进行爬取
                    if (null == messages) {
                        strHost = StringUtil.getHost("pop3", userName);
                        //更新map的操作 传入strInfo[] 传出map
                        returnMap = mailHandler.getMailMapByuserInfo(strHost, mailMap, userInfo);
                        messages = mailHandler.getMessageByMail(returnMap.get(strHost), proxyIpAttr);
                    }
                    //设置删除邮件的状态
                    boolean deleteSuccess = false;
                    //可以删除邮件的方式必须是imap方式才能删除邮件
                    if (null != messages && strHost.contains("imap")) {
                        //删除不合理登录网易所发送的邮件,表示删除成功，然后开始抓取数据
                        messages = mailHandler.deleteTheRecentMail(subList, messages);
                        //删除邮件后设置状态true
                        deleteSuccess = true;
                    }
                    //删除成功了再次获取邮件
                    if (deleteSuccess) {
                        messages = mailHandler.getMessageByMail(returnMap.get(strHost), proxyIpAttr);
                        if (messages.length > 0) {
//                        mainLogger.info("经过删除方法后最后一封邮件的标题:    " + MailUtil.getSubject((MimeMessage) messages[messages.length - 1]));
                        }
                    }
                    //最后执行保存邮件过程
                    if (null != messages) {
                        //数据保存到ES
//                        if ("es".equals(args[0])) {
//                            mailHandler.excuteMassage(esClient, args[2], args[3], messages);
//                        }
                        //保存数据到文件
                        if ("file".equals(args[0])) {
                            mailHandler.excuteMassage(new File(args[2]), messages);
                        }
                        //数据传送到kafka
                        if ("kafka".equals(args[0])) {
                            mailHandler.excuteMassage(args[2], kafkaProducer, messages);
                        }
                    }
                }
//            } else {
//                mainLogger.info("--------无可用代理ip");
//            }
        } catch (Exception e) {
            mainLogger.info(e.getMessage());
        }
    }
}

